package com.nablasystems.suag.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

@Entity
@Table(name="curso")
public class Curso {
	@Id
	@Column(name="idCurso")
	@GeneratedValue
	@OrderBy
	private int idCurso;
	
	@ManyToOne
    @JoinColumn(name = "idMateria")
	private Materia materia;
	
	@ManyToOne
    @JoinColumn(name = "idAula")
	private Aula aula;
	
	@ManyToOne
    @JoinColumn(name = "idPeriodo")
	private Periodo periodo;
	
	@Column(name="cantidadInasistenciasPermitidas")
	private int inasistencias;
	
	@Column(name="anio")
	private int anio;
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy="curso",cascade= CascadeType.ALL)
	private Set<InscripcionCursado> inscriptos = new HashSet<InscripcionCursado>();
		
	//@OrderBy("dia.nombre")
	@OneToMany(fetch = FetchType.EAGER, mappedBy="curso",cascade= CascadeType.ALL)
	private Set<HorarioCurso> horarios = new HashSet<HorarioCurso>();
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy="curso",cascade= CascadeType.ALL)
	private Set<Clases> clases = new HashSet<Clases>();
	
	@ManyToOne
	@JoinColumn(name="idDocente")
	private Docente docente;
				
	public int getIdCurso() {
		return idCurso;
	}

	public void setIdCurso(int idCurso) {
		this.idCurso = idCurso;
	}

	public Materia getMateria() {
		return materia;
	}

	public void setMateria(Materia materia) {
		this.materia = materia;
	}

	public Aula getAula() {
		return aula;
	}

	public void setAula(Aula aula) {
		this.aula = aula;
	}

	public Periodo getPeriodo() {
		return periodo;
	}

	public void setPeriodo(Periodo periodo) {
		this.periodo = periodo;
	}

	public int getInasistencias() {
		return inasistencias;
	}

	public void setInasistencias(int inasistencias) {
		this.inasistencias = inasistencias;
	}

	public int getAnio() {
		return anio;
	}

	public void setAnio(int anio) {
		this.anio = anio;
	}
	
	public Set<HorarioCurso> getHorarios(){
		return this.horarios;
	}
	public Set<Clases> getClases(){
		return this.clases;
	}

	public Set<InscripcionCursado> getInscriptos() {
		return inscriptos;
	}

	public void setInscriptos(Set<InscripcionCursado> inscriptos) {
		this.inscriptos = inscriptos;
	}

	public void setHorarios(Set<HorarioCurso> horarios) {
		this.horarios = horarios;
	}

	public void setClases(Set<Clases> clases) {
		this.clases = clases;
	}

	
	public Docente getDocente() {
		return docente;
	}

	public void setDocente(Docente docente) {
		this.docente = docente;
	}

	@Override
	public String toString() {
		return "Curso [idCurso=" + idCurso + ", materia=" + materia + "]";
	}
	
}
